#ifndef __SCRIPT_DEBUG_H__
#define __SCRIPT_DEBUG_H__

#include <stdio.h>
#include <stdarg.h>

#define SCRIPT_DEBUG_LEVEL_ERROR 0
#define SCRIPT_DEBUG_LEVEL_WARNING 1
#define SCRIPT_DEBUG_LEVEL_DEBUG 2

#define SCRIPT_DEBUG 1


#ifdef SCRIPT_DEBUG
// #define SCRIPT_DEBUG_ERR(fmt,args...) printf("[script ERR] \033[31m"fmt"\033[0m\n",##args)
#define SCRIPT_DEBUG_ERR(fmt, args...)  g_script_log.error(fmt, ##args)

#if (SCRIPT_DEBUG >= 1)
	// #define SCRIPT_DEBUG_WARN(fmt,args...) printf("[script WARNING] \033[33m"fmt"\033[0m\n",##args)
	#define SCRIPT_DEBUG_WARN(fmt, args...)  g_script_log.warni(fmt, ##args)
#else
	#define SCRIPT_DEBUG_WARN(fmt,args...) 
#endif

#if (SCRIPT_DEBUG >= 2)
	// #define SCRIPT_DEBUG_DEBUG(fmt,args...) printf("[script DEBUG] \033[34m"fmt"\033[0m\n",##args)
	#define SCRIPT_DEBUG_DEBUG(fmt, args...)  g_script_log.debug(fmt, ##args)
#else
	#define SCRIPT_DEBUG_DEBUG(fmt,args...) 
#endif // #if (SCRIPT_DEBUG >= 2)

#else

#define SCRIPT_DEBUG_ERR(fmt,  args...)
#define SCRIPT_DEBUG_WARN(fmt,  args...)
#define SCRIPT_DEBUG_DEBUG(fmt,  args...)

#endif	// #ifdef SCRIPT_DEBUG

typedef void (*script_log_print)(char *fmt, ...);

typedef struct script_log{
	script_log_print error;
	script_log_print warni;
	script_log_print debug;
} script_log_t;

extern script_log_t g_script_log;
int script_log_interface_register(script_log_print error, script_log_print warni, script_log_print debug);

#endif
